home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / c / restracklib_0_2.lha / ResTrackLib / restrack_intern.h < prev    next >
C/C++ Source or Header  |  1994-07-31  |  6KB  |  160 lines

  1. /******************************************************************************
  2.  
  3.     MODUL
  4.     restrack_intern.h
  5.  
  6.     DESCRIPTION
  7.     Internal defines and types for the resource tracking library.
  8.  
  9. ******************************************************************************/
  10.  
  11. #ifndef RESTRACK_INTERN_H
  12. #define RESTRACK_INTERN_H
  13.  
  14. /**************************************
  15.         Includes
  16. **************************************/
  17. #ifndef EXEC_TYPES_H
  18. #   include <exec/types.h>
  19. #endif
  20. #ifndef EXEC_LISTS_H
  21. #   include <exec/lists.h>
  22. #endif
  23. #define RTL_INTERN
  24. #include "restrack.h"
  25.  
  26.  
  27. /**************************************
  28.     Defines und Strukturen
  29. **************************************/
  30. /* Types of resources */
  31. #define RTLRT_AllocMem        0x0000    /* AllocMem(), FreeMem() */
  32. #define RTLRT_AllocVec        0x0001    /* AllocVec(), FreeVec() */
  33. #define RTLRT_Open        0x0002    /* Open(), Close() */
  34. #define RTLRT_Lock        0x0003    /* Lock(), UnLock(), DupLock(),
  35.                        CreateDir(), CurrentDir() */
  36. #define RTLRT_OpenLibrary   0x0004    /* OpenLibrary(), CloseLibrary() */
  37. #define RTLRT_Allocate        0x0005    /* Allocate(), Deallocate() */
  38. #define RTLRT_AllocEntry    0x0006    /* AllocEntry(), FreeEntry() */
  39. #define RTLRT_MsgPort        0x0007    /* CreateMsgPort(), DeleteMsgPort() */
  40. #define RTLRT_IORequest     0x0008    /* OpenDevice(), CloseDevice() */
  41. #define RTLRT_Pool        0x0009    /* CreatePool(), DeletePool(),
  42.                        AllocPooled(), FreePooled() */
  43.  
  44. /* Check if we should do resource tracking for this resource */
  45. #define DO_RT(flag)  (ResourceTrackingLevel > 0 && (ResourcesToTrack & (flag)))
  46.  
  47. /* Add the resource to the list if resource tracking is enabled and we track
  48.    this resource. */
  49. #define CHECK_ADD_RN(flag,rt,ptr,lng)                                       \
  50.     if (DO_RT(flag))                                                    \
  51.         AddResourceNode (file, line, (rt), (APTR)ptr, (LONG)lng);
  52.  
  53. #define CHECK_ADD_RN3(flag,rt,ptr,lng,ptr2)                                 \
  54.     if (DO_RT(flag))                                                    \
  55.         AddResourceNode3 (file, line, (rt), (APTR)ptr, (LONG)lng,       \
  56.                 (APTR)ptr2);
  57.  
  58. /* if resource tracking is enabled, print the error "Illegal cmd" else
  59.    just call the command */
  60. #define CHECK_RT_ERROR_OR_CALL(flag,name,fmt,arg,cmd)                       \
  61.     if (DO_RT(flag))                                                    \
  62.     {                                    \
  63.         fprintf (stderr, "ERROR: Illegal " #name " " fmt " at %s:%d\n", \
  64.             arg, file, line);                        \
  65.     }                                    \
  66.     else                                    \
  67.         cmd;
  68.  
  69. #define CHECK_RT_ERROR_OR_CALL2(flag,name,fmt,arg1,arg2,cmd)                \
  70.     if (DO_RT(flag))                                                    \
  71.     {                                    \
  72.         fprintf (stderr, "ERROR: Illegal " #name " " fmt " at %s:%d\n", \
  73.             arg1, arg2, file, line);                    \
  74.     }                                    \
  75.     else                                    \
  76.         cmd;
  77.  
  78. /* check the resource and if the type is ok, free it else print an error */
  79. #define CHECK_RES_ERROR_OR_FREE(res,name,cmd)                               \
  80.     if (node->Resource != res)                                          \
  81.     {                                    \
  82.         fprintf (stderr, "ERROR: " #name " at %s:%d called for\n",      \
  83.             file, line);                        \
  84.         PrintResourceNode (node);                                       \
  85.     }                                    \
  86.     else                                    \
  87.     {                                    \
  88.         cmd;                                \
  89.         RemoveResourceNode (node);                                      \
  90.     }
  91.  
  92. /* Look for the resource. If we can't find it, print an error if resource
  93.    tracking is enabled and we track this resource. If we don't track this
  94.    resource or resource tracking is disabled, just call the command.
  95.     If we found the resource, check the type. If the type is ok, call the
  96.    command and remove the resource node. If the type is wrong, print an
  97.    error. */
  98. #define CHECK_REM_RN(par,res,name,cmd,flag,fmt,arg)                         \
  99.     if ((node = FindResourceNode1 ((APTR)par)) )                            \
  100.     CHECK_RES_ERROR_OR_FREE(res,name,cmd)                               \
  101.     else                                    \
  102.     CHECK_RT_ERROR_OR_CALL(flag,name,fmt,arg,cmd)
  103.  
  104. #define NRT(name,param,args)            \
  105.     void NRT_ ## name param     \
  106.     {                \
  107.         name args;            \
  108.     }
  109.  
  110. #define NRT_RET(ret,name,param,args)    \
  111.     ret NRT_ ## name param        \
  112.     {                \
  113.         return (name args);         \
  114.     }
  115.  
  116. typedef struct
  117. {
  118.     struct MinNode Node;
  119.     const char *   File;
  120.     WORD       Line;
  121.     WORD       Resource;
  122.     APTR       Ptr;
  123.     LONG       Long;
  124.     APTR       Ptr2;
  125. } ResourceNode;
  126.  
  127. typedef struct
  128. {
  129.     void (*FreeResource)(ResourceNode *);
  130.     const char * ResourceName;
  131.     const char * ResourcePrintFmt;
  132. } ResourceHandler;
  133.  
  134.  
  135. /**************************************
  136.         Globale Variable
  137. **************************************/
  138. extern LONG  ResourceTrackingLevel;
  139. extern ULONG ResourcesToTrack;
  140.  
  141. extern const ResourceHandler Handler[];
  142.  
  143.  
  144. /**************************************
  145.            Prototypes
  146. **************************************/
  147. void AddResourceNode (const char * file, WORD line, WORD resource, APTR ptr, LONG l);
  148. void AddResourceNode3 (const char * file, WORD line, WORD resource, APTR ptr, LONG l, APTR ptr2);
  149. void PrintResourceNode (ResourceNode * node);
  150. ResourceNode * FindResourceNode1 (APTR ptr);
  151. ResourceNode * FindResourceNode2 (APTR ptr, LONG l);
  152. void RemoveResourceNode (ResourceNode * node);
  153.  
  154.  
  155. #endif /* RESTRACK_INTERN_H */
  156.  
  157. /******************************************************************************
  158. *****  ENDE restrack_intern.h
  159. ******************************************************************************/
  160.